# -*- coding: utf-8 -*-
# @Time : 2022/6/25 08:24
# @Author : cheney
# @File : buzzerDao.py
# @Software: PyCharm
# @Site: www.cheney.cc

"""
    这里是蜂鸣器的底层模块
"""
import RPi.GPIO as GPIO
import time


class buzzerDao:
    makerobo_Buzzer = 11  # 无源蜂鸣器管脚定义
    # makerobo_Buzz = None  # 指定一个全局变量来替换gpi.pwm
    GPIO.setmode(GPIO.BOARD)  # 采用实际的物理管脚给GPIO口
    GPIO.setwarnings(False)  # 关闭GPIO警告提示
    GPIO.setup(makerobo_Buzzer, GPIO.OUT)  # 设置无源蜂鸣器管脚为输出模式

    makerobo_Buzz = GPIO.PWM(makerobo_Buzzer, 440)  # 设置初始频率为440。
    makerobo_Buzz.start(50)  # 按50%工作定额启动蜂鸣器引脚。


    def ring_dao(self, sound=500, times=5, sleep1=0.2, sleep2=0.1):
        """
        todo：完善这个函数的调用方法，参数列表等
        :param sleep2: 蜂鸣-延迟时间1
        :param sleep1: 停止-延迟时间2
        :param sound: 歌曲音符的频率
        :param times: 重复次数
        :return:
        """
        try:
            for i in range(times):
                self.makerobo_Buzz.ChangeFrequency(sound)  # 设置歌曲音符的频率
                time.sleep(sleep1)  # 延迟一个节拍* 0.5秒的音符
                self.makerobo_Buzz.stop()
                time.sleep(sleep2)  # 延迟一个节拍* 0.5秒的音符
                self.makerobo_Buzz.start(50)
        except KeyboardInterrupt:  # 当按下Ctrl+C时，将执行destroy()子程序。
            self.makerobo_Buzz.stop()  # 停止蜂鸣器
            GPIO.output(self.makerobo_Buzzer, 1)  # 设置蜂鸣器管脚为高电平
            GPIO.cleanup()  # 释放资源

    def __del__(self):
        GPIO.cleanup()
